
/**
 * 最大值
 * 
 * 题目描述

给定一组整数（非负），重排顺序后输出一个最大的整数。

示例1

输入：[10,9]
输出：910
说明：输出结果可能非常大，所以你需要返回一个字符串而不是整数。

输入描述
数字组合

输出描述
最大的整数

用例
输入	10 9
输出	910
说明	无
 */

import java.util.Arrays;
import java.util.Scanner;

/**
  * 
  题目解析
本题原型题是：179. 最大数 - 力扣（LeetCode）

如果数组中各元素长度都相同的话，则将数组元素按照字典序降序，这样数组元素按顺序拼接得到的组合数就是最大。

比如数组 [1, 9]，按照字典序降序的话，就变为了 [9, 1]，按顺序拼接结果为：91（要比19大）。
如果数组中各元素长度不全相同的话，则此时直接字典序降序，可能无法得到最大组合数

比如数组 [3, 32, 321]，按照字典序降序后变为 [321, 32, 3]，然后进行拼接，得到组合数321323，但是这个组合数显然不是最大的，最大的组合数应该是 332321。
本题中各数组元素的长度是有可能不一样的，此时我们应该采用另一种排序规则：

即直接尝试对要组合的两个数字串 a，b 进行组合，此时有两种组合方式：

a + b
b + a
然后，比较 (a + b) 和 （b+a）的数值谁小，如果 a+b 的数值更大，则保持当前 a,b 顺序不变，如果 b+a 的数值更大，则交换 a,b 位置。

比如 strs = [a, b]， a = "3"，b = "34"

a + b = "334"
b + a = "343"
可以发现 b+a 更大，因此交换 a,b 位置，strs变为[34, 3]，然后进行元素拼接得到 343 最大组合数。

另外，本题需要注意的是，题目描述说：

给定一组整数（非负）
因此是有可能出现下面用例的：

0 0 0 0
此时最终结果为："0000"，按照leetcode那边说法是不合法的，即输出的数不能带有前导0。

我们可以使用正则，或者字符串操作去除前导0。

  */
public class 最大值 {
    
    public static void main(String[] args) {
        
         Scanner sc = new Scanner(System.in);
 
         String[] nums = sc.nextLine().split(" ");
 
         Arrays.sort(nums, (a, b) -> (b + a).compareTo(a + b));
 
         System.out.println(String.join("", nums).replaceAll("^0+", "0"));
    }

}
